$.Class("Rect",
// static properties
{     
	width : 10,	// Chiều rộng của vật
	movedStep : 10,	// Bước nhảy di chuyển của vật (px)
},
// prototype properties
    {    	
    	children : [],
        // constructor function
        init: function(o) {
        	this.direction = $p.RIGHT;
        	
        	if(typeof(o.x) != "undefined") this.x = o.x; else this.x = 0;
        	if(typeof(o.y) != "undefined") this.y = o.y; else this.y = 0;
        	if(typeof(o.width) != "undefined") this.width = o.width; else this.width = Rect.width;
        	if(typeof(o.front) != "undefined") this.front = o.front; else this.front = null;
        },
        move : function()
        {
        	var back = this.back;
			if(back != null)	// Xét tọa độ định sẵn cho Object phía sau
			{
				back.x_next = this.x;
				back.y_next = this.y;	
			}
        	
        	if(this.front == null)	// Object first
        	{
	        	var step = Rect.movedStep;
	        	var pos_x_end = app.width - this.width;
	        	var pos_y_end = app.width - this.width;
	        	
	        	switch(this.direction)
				{
					case $p.UP:
						if(this.y != 0)
							this.y -= step;
						else
							app.status = STOP;
						break;
					case $p.DOWN:
						if(this.y != pos_y_end)
							this.y += step;
						else
							app.status = STOP;			
						break;
					case $p.LEFT:
						if(this.x != 0)
							this.x -= step;
						else
							app.status = STOP;	
						break;
					case $p.RIGHT:
						if(this.x != pos_x_end)
							this.x += step;
						else
						{
							app.status = STOP;
						}			
						break;
				}
			}
			else	// Xét tọa độ x,y của Object theo tọa độ định sẵn
			{
				this.x = this.x_next;	
				this.y = this.y_next;
				//console.log("Set for next: " + this.x + " - y: " + this.y);
			}
			
			if(this.back != null) // Nếu có Object phía sau	
        	{
        		//console.log("Move back object");
				this.back.move();        		
        	}
        },
        drawInit : function()
        {
        	$p.rect(this.x, this.y, this.width, this.width);
        },
        draw: function()
        {
			//console.log("Draw - x: " + this.x + " - y:" + this.y); 
			$p.rect(this.x, this.y, this.width, this.width);
			   	
        	if(this.back != null) // Nếu có Object phía sau	
        	{
        		//console.log("Draw back object");
				this.back.draw();        		
        	}
        },
        addObject : function()
        {
        	var step = Rect.movedStep;
        	var x = this.x - step;
			var y = this.y;        	
			
        	var object = new Rect({x : x, y : y, width:Rect.width, front : this});  
        	
        	this.back = object;
        	app.last = object;
        }
})
